home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / c / amivogl-mdev / amivogl-mdev.lha / examples / vogl.h < prev    next >
C/C++ Source or Header  |  1997-08-15  |  31KB  |  906 lines

  1. /* vogl.h: */
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <stdlib.h>
  5.  
  6. #ifdef AZTEC_C
  7. # ifndef AMIGA
  8. #  define AMIGA
  9. # endif
  10. #else
  11. # ifdef AMIGA
  12. #  ifndef AZTEC_C
  13. #   define AZTEC_C
  14. #  endif
  15. # endif
  16. #endif
  17.  
  18. #if defined(PC) || defined(AMIGA) || defined(AZTEC_C)
  19. #include <string.h>
  20. #else
  21. #include <strings.h>
  22. #endif
  23.  
  24. #ifdef PC    /* Stupid pox head crap */
  25. char    *vallocate();
  26. char    *malloc();
  27. #endif
  28.  
  29. #if defined(AMIGA) || defined(sgi)
  30. # ifndef __PROTOTYPE__
  31. #  define __PROTOTYPE__
  32. # endif
  33. #include "hershey.h"
  34. #endif
  35.  
  36. /*
  37.  * VOGL is always defined if a header file is from the 
  38.  * VOGL library. In cases where you do use some VOGL
  39.  * initialisation routines like vinit, just put #ifdef VOGL...
  40.  * around.
  41.  */
  42. #ifndef VOGL
  43. #define    VOGL
  44. #endif
  45.  
  46. #ifndef TRUE
  47. #define    TRUE    1
  48. #endif
  49.  
  50. #ifndef FALSE
  51. #define    FALSE    0
  52. #endif
  53.  
  54. /*
  55.  * Misc defines...
  56.  */
  57. #define    FLAT    0
  58. #define SMOOTH    1
  59. #define GD_XPMAX 1
  60. #define GD_YPMAX 2
  61.  
  62. /*
  63.  * standard colour indices
  64.  */
  65. #define    BLACK        0
  66. #define    RED        1
  67. #define    GREEN        2
  68. #define    YELLOW        3
  69. #define    BLUE        4
  70. #define    MAGENTA        5
  71. #define    CYAN        6
  72. #define    WHITE        7
  73.  
  74. /*
  75.  * when (if ever) we need the precision
  76.  */
  77. #ifdef DOUBLE
  78. #define    float    double
  79. #endif
  80.  
  81. /*
  82.  * How to convert degrees to radians
  83.  */
  84. #define    PI    3.14159265358979
  85. #define D2R    (PI / 180.0)
  86.  
  87. /*
  88.  * miscellaneous typedefs and type defines
  89.  */
  90. typedef float    Vector[4];
  91. typedef float    Matrix[4][4];
  92. typedef float    Tensor[4][4][4];
  93. typedef short    Angle;
  94. typedef float    Coord;
  95. typedef long    Icoord;
  96. typedef short    Scoord;
  97. // typedef long    Object;
  98. typedef short    Screencoord;
  99. typedef long    Boolean;
  100.  
  101. typedef unsigned short    Device;
  102.  
  103. typedef unsigned short    Colorindex;
  104.  
  105.  
  106. /*
  107.  * when register variables get us into trouble
  108.  */
  109. #ifdef NOREGISTER
  110. #define    register
  111. #endif
  112.  
  113. /*
  114.  * max number of vertices in a ploygon
  115.  */
  116. #define    MAXVERTS    128
  117.  
  118. /*
  119.  * object definitions
  120.  */
  121. #define MAXENTS        101        /* size of object table */
  122. #define    MAXTOKS        100        /* num. of tokens alloced at once in
  123.                        an object  */
  124.  
  125. /*
  126.  * Polygon fill modes for "polymode"
  127.  */
  128. #define PYM_POINT    0
  129. #define PYM_LINE    0
  130. #define PYM_FILL    1
  131. #define PYM_HOLLOW    1
  132.  
  133. /*
  134.  * functions which can appear in objects
  135.  */
  136. #define    ARC        1
  137. #define    CALLOBJ        3
  138. #define    CIRCLE        5
  139. #define    CLEAR        6
  140. #define    COLOR        7
  141. #define    DRAW        8
  142. #define    DRAWSTR        10
  143. #define    FONT        12
  144. #define    LOADMATRIX    15
  145. #define    MAPCOLOR    16
  146. #define    MOVE        17
  147. #define    MULTMATRIX    18
  148. #define    POLY        19
  149. #define    POPATTRIBUTES    22
  150. #define    POPMATRIX    23
  151. #define    POPVIEWPORT    24
  152. #define    PUSHATTRIBUTES    25
  153. #define    PUSHMATRIX    26
  154. #define    PUSHVIEWPORT    27
  155. #define    RCURVE        28
  156. #define    RPATCH        29
  157. #define    SECTOR        30
  158. #define    VIEWPORT    33
  159. #define    BACKBUFFER    34
  160. #define    FRONTBUFFER    35
  161. #define    SWAPBUFFERS    36
  162. #define    BACKFACING    37
  163. #define    TRANSLATE    38
  164. #define    ROTATE        39
  165. #define    SCALE        40
  166.  
  167. #define    ARCF        41
  168. #define    CIRCF        42
  169. #define    POLYF        43
  170. #define    RECTF        44
  171.  
  172. #define    CMOV        45
  173.  
  174. /*
  175.  * States for bgn* and end* calls
  176.  */
  177. #define    NONE        0    /* Just set current spot */
  178. #define    VPNT        1    /* Draw dots         */
  179. #define    VLINE        2    /* Draw lines         */
  180. #define    VCLINE        3    /* Draw closed lines     */
  181. #define    VPOLY        4    /* Draw a polygon      */
  182.  
  183. /*
  184.  * data types for object tokens
  185.  */
  186. typedef union tk {
  187.     char    *s;
  188.     int      i;
  189.     float    f;
  190.     } Token;
  191.  
  192. typedef struct tls {
  193.     int         count;
  194.     Token      *toks;
  195.     struct tls *next;
  196.     } TokList;
  197.  
  198. /*
  199.  * double buffering modes.
  200.  */
  201. #define    SINGLEBUF        1
  202.  
  203. /*
  204.  * attributes
  205.  */
  206. typedef struct {
  207.     char    backface,
  208.         mode;            /* Which mode are we in */
  209.     int     color;
  210.     float   fontheight;
  211.     float   fontwidth;
  212.     int    fontnum;
  213.     } Attribute;
  214.  
  215. /*
  216.  * viewport
  217.  */
  218. typedef struct vp {
  219.     float    left;
  220.     float    right;
  221.     float    bottom;
  222.     float    top;
  223.     } Viewport; 
  224.  
  225. /*
  226.  * stacks
  227.  */
  228. typedef    struct    ms {    /* Matrix stack entries    */
  229.     Matrix        m;
  230.     struct    ms    *back;
  231.     } Mstack;
  232.  
  233. typedef    struct    as {    /* Attribute stack entries */
  234.     Attribute    a;
  235.     struct    as    *back;
  236.     } Astack;
  237.  
  238. typedef    struct    vs {    /* Viewport stack entries */
  239.     Viewport    v;
  240.     struct    vs    *back;
  241.     } Vstack;
  242.  
  243. /*
  244.  * vogle device structures
  245.  */
  246.  
  247. #ifdef AMIGA
  248. typedef struct dev {
  249.     char    *devname;                /* name of device                        */
  250.     char    *large,                    /* name of large font                    */
  251.         *small;                        /* name of small font                    */
  252.     int    (*Vbackb)(void),            /* Set drawing in back buffer            */
  253.         (*Vchar)(char),                /* Draw a hardware character            */
  254.         (*Vcheckkey)(void),            /* Ckeck if a key was hit                */
  255.         (*Vclear)(void),            /* Clear the screen to current color    */
  256.         (*Vcolor)(int),                /* Set current color                    */
  257.         (*Vdraw)(int,int),            /* Draw a line                            */
  258.         (*Vexit)(void),                /* Exit graphics                        */
  259.         (*Vfill)(int,int[],int[]),    /* Fill a polygon                        */
  260.         (*Vfont)(char *),            /* Set hardware font                    */
  261.         (*Vfrontb)(void),            /* Set drawing in front buffer            */
  262.         (*Vgetkey)(void),            /* Wait for and get the next key hit    */
  263.         (*Vinit)(void),                /* Initialise the device                */
  264.         (*Vlocator)(int *,int*),    /* Get mouse/cross hair position        */
  265.         (*Vmapcolor)(int,int,int,int),/* Set color indicies                    */
  266.         (*Vstring)(char *),            /* Draw a hardware string                */
  267.         (*Vswapb)(void);            /* Swap front and back buffers            */
  268.     } DevEntry;
  269. #else
  270. typedef struct dev {
  271.     char    *devname;        /* name of device                        */
  272.     char    *large,            /* name of large font                    */
  273.         *small;                /* name of small font                    */
  274.     int    (*Vbackb)(),        /* Set drawing in back buffer            */
  275.         (*Vchar)(),            /* Draw a hardware character            */
  276.         (*Vcheckkey)(),        /* Ckeck if a key was hit                */
  277.         (*Vclear)(),        /* Clear the screen to current color    */
  278.         (*Vcolor)(),        /* Set current color                    */
  279.         (*Vdraw)(),            /* Draw a line                            */
  280.         (*Vexit)(),            /* Exit graphics                        */
  281.         (*Vfill)(),            /* Fill a polygon                        */
  282.         (*Vfont)(),            /* Set hardware font                    */
  283.         (*Vfrontb)(),        /* Set drawing in front buffer            */
  284.         (*Vgetkey)(),        /* Wait for and get the next key hit    */
  285.         (*Vinit)(),            /* Initialise the device                */
  286.         (*Vlocator)(),        /* Get mouse/cross hair position        */
  287.         (*Vmapcolor)(),        /* Set color indicies                    */
  288.         (*Vstring)(),        /* Draw a hardware string                */
  289.         (*Vswapb)();        /* Swap front and back buffers            */
  290.     } DevEntry;
  291. #endif
  292.  
  293. typedef struct vdev {
  294.     char        initialised,
  295.                 clipoff,
  296.                 inobject,
  297.                 inpolygon,
  298.                 fill,            /* polygon filling                        */
  299.                 cpVvalid,        /* is the current device position valid */
  300.                 inbackbuffer,    /* are we in the backbuffer                */
  301.                 clipplanes;        /* active clipping planes                */
  302.     void        (*pmove)(),        /* Polygon moves                        */
  303.                 (*pdraw)();        /* Polygon draws                        */
  304.     TokList        *tokens;        /* ptr 2 list of tokens for current object */
  305.     Mstack        *transmat;        /* top of transformation stack            */
  306.     Astack        *attr;            /* top of attribute stack                */
  307.     Vstack        *viewport;        /* top of viewport stack                */
  308.     float        hheight, hwidth;/* hardware character height, width        */
  309.     Vector        cpW,            /* current postion in world coords        */
  310.                 cpWtrans,        /* current world coords transformed        */
  311.                 upvector;        /* world up                                */
  312.     int            depth,            /* # bit planes on screen                */
  313.                 maxVx, minVx,
  314.                 maxVy, minVy,
  315.                 sizeX, sizeY,     /* size of square on screen                */
  316.                 sizeSx, sizeSy,    /* side in x, side in y (# pixels)        */
  317.                 cpVx, cpVy;
  318.     DevEntry    dev;
  319.     float        savex,            /* Where we started for v*()            */
  320.                 savey,
  321.                 savez;
  322.     char        bgnmode;        /* What to do with v*() calls            */
  323.     char        save;            /* Do we save 1st v*() point            */
  324.  
  325.     char        *wintitle;        /* window title                            */
  326.  
  327.     char        *devname;        /* pointer to device name                */
  328.  
  329.     Matrix        tbasis, ubasis, *bases; /* Patch stuff                    */
  330.     
  331.     char        *enabled;        /* pointer to enabled devices mask        */
  332.     int            maxfontnum;
  333.  
  334.     char        alreadyread;    /* queue device stuff                    */
  335.     char        kbdmode;        /* are we in keyboard mode                */
  336.     char        mouseevents;    /* are mouse events enabled                */
  337.     char        kbdevents;        /* are kbd events enabled                */
  338.     int            devno, data;
  339.  
  340.     int            concave;        /* concave polygons?                    */
  341.  
  342.     } VDevice;
  343.  
  344. extern VDevice    vdevice;        /* device structure                        */
  345.  
  346. #define    V_X    0            /* x axis in cpW */
  347. #define    V_Y    1            /* y axis in cpW */
  348. #define    V_Z    2            /* z axis in cpW */
  349. #define    V_W    3            /* w axis in cpW */
  350.  
  351. #ifdef __PROTOTYPE__
  352.  
  353. void arcprecision(int);                                /* arcs.c          */
  354. void circleprecision(int);                             /* arcs.c          */
  355. void arc( Coord, Coord, Coord, Angle, Angle);          /* arcs.c          */
  356. void arcs( Scoord, Scoord, Scoord, Angle, Angle);      /* arcs.c          */
  357. void arci( Icoord, Icoord, Icoord, Angle, Angle);      /* arcs.c          */
  358. void arcf( Coord, Coord, Coord, Angle, Angle);         /* arcs.c          */
  359. void arcfs( Scoord, Scoord, Scoord, Angle, Angle);     /* arcs.c          */
  360. void arcfi( Icoord, Icoord, Icoord, Angle, Angle);     /* arcs.c          */
  361. void circ( Coord, Coord, Coord);                       /* arcs.c          */
  362. void circs( Scoord, Scoord, Scoord);                   /* arcs.c          */
  363. void circi( Icoord, Icoord, Icoord);                   /* arcs.c          */
  364. void circf( Coord, Coord, Coord);                      /* arcs.c          */
  365. void circfs( Scoord, Scoord, Scoord);                  /* arcs.c          */
  366. void circfi( Icoord, Icoord, Icoord);                  /* arcs.c          */
  367. void pushattributes(void);                             /* attr.c          */
  368. void popattributes(void);                              /* attr.c          */
  369. int printattribs(char *);                              /* attr.c          */
  370. void backbuffer(int);                                  /* buffer.c        */
  371. void frontbuffer(int);                                 /* buffer.c        */
  372. void swapbuffers(void);                                /* buffer.c        */
  373. void doublebuffer(void);                               /* buffer.c        */
  374. void singlebuffer(void);                               /* buffer.c        */
  375. void clip( register Vector, register Vector);          /* clip.c          */
  376. int MakeEdgeCoords( int, Vector);                      /* clip.c          */
  377. void quickclip( register Vector, register Vector);     /* clip.c          */
  378. void curvebasis(short);                                /* curves.c        */
  379. void curveprecision(short);                            /* curves.c        */
  380. void rcrv(Coord[4][4]);                                /* curves.c        */
  381. void crv(Coord[4][3]);                                 /* curves.c        */
  382. void drcurve( int, Matrix);                            /* curves.c        */
  383. void crvn( long, Coord[][3]);                          /* curves.c        */
  384. void rcrvn( long, Coord[][4]);                         /* curves.c        */
  385. void curveit(short);                                   /* curves.c        */
  386. void draw( float, float, float);                       /* draw.c          */
  387. void draws( Scoord, Scoord, Scoord);                   /* draw.c          */
  388. void drawi( Icoord, Icoord, Icoord);                   /* draw.c          */
  389. void draw2( float, float);                             /* draw.c          */
  390. void draw2s( Scoord, Scoord);                          /* draw.c          */
  391. void draw2i( Icoord, Icoord);                          /* draw.c          */
  392. void rdr( float, float, float);                        /* draw.c          */
  393. void rdrs( Scoord, Scoord, Scoord);                    /* draw.c          */
  394. void rdri( Icoord, Icoord, Icoord);                    /* draw.c          */
  395. void rdr2( float, float);                              /* draw.c          */
  396. void rdr2s( Scoord, Scoord);                           /* draw.c          */
  397. void rdr2i( Icoord, Icoord);                           /* draw.c          */
  398. void bgnline(void);                                    /* draw.c          */
  399. void endline(void);                                    /* draw.c          */
  400. void bgnclosedline(void);                              /* draw.c          */
  401. void endclosedline(void);                              /* draw.c          */
  402. void voutput(char *);                                  /* drivers.c       */
  403. FILE * _voutfile(void);                                /* drivers.c       */
  404. void verror(char *);                                   /* drivers.c       */
  405. void gexit(void);                                      /* drivers.c       */
  406. void vinit(char *);                                    /* drivers.c       */
  407. long winopen(char *);                                  /* drivers.c       */
  408. void ginit(void);                                      /* drivers.c       */
  409. void gconfig(void);                                    /* drivers.c       */
  410. void vnewdev(char *);                                  /* drivers.c       */
  411. char * vgetdev(char *);                                /* drivers.c       */
  412. long getvaluator(Device);                              /* drivers.c       */
  413. Boolean getbutton(Device);                             /* drivers.c       */
  414. void clear(void);                                      /* drivers.c       */
  415. void colorf(float);                                    /* drivers.c       */
  416. void color(int);                                       /* drivers.c       */
  417. void mapcolor( Colorindex, short, short, short);       /* drivers.c       */
  418. long getplanes(void);                                  /* drivers.c       */
  419. void reshapeviewport(void);                            /* drivers.c       */
  420. void winconstraints(void);                             /* drivers.c       */
  421. void keepaspect(void);                                 /* drivers.c       */
  422. void shademodel(long);                                 /* drivers.c       */
  423. long getgdesc(long);                                   /* drivers.c       */
  424. void getgp( Coord *, Coord *, Coord *);                /* getgp.c         */
  425. void getgpos( Coord *, Coord *, Coord *, Coord *);     /* getgp.c         */
  426. void VtoWxy( float, float, float *, float *);          /* mapping.c       */
  427. void _mapmsave(Matrix);                                /* mapping.c       */
  428. void CalcW2Vcoeffs(void);                              /* mapping.c       */
  429. int WtoVx(float[]);                                    /* mapping.c       */
  430. int WtoVy(float[]);                                    /* mapping.c       */
  431. void copyvector( register Vector, register Vector);    /* matrix.c        */
  432. void copymatrix( register Matrix, register Matrix);    /* matrix.c        */
  433. void copytranspose( register Matrix,                   /* matrix.c        */
  434.    register Matrix);
  435. void getmatrix(Matrix);                                /* matrix.c        */
  436. void pushmatrix(void);                                 /* matrix.c        */
  437. void popmatrix(void);                                  /* matrix.c        */
  438. void loadmatrix(Matrix);                               /* matrix.c        */
  439. void mult4x4( register Matrix, register Matrix,        /* matrix.c        */
  440.    register Matrix);
  441. void multmatrix(Matrix);                               /* matrix.c        */
  442. void identmatrix(Matrix);                              /* matrix.c        */
  443. void multvector( register Vector, register Vector,     /* matrix.c        */
  444.    register Matrix);
  445. void premultvector( Vector, Vector, Matrix);           /* matrix.c        */
  446. int printmat( char *, Matrix);                         /* matrix.c        */
  447. int printvect( char *, Vector);                        /* matrix.c        */
  448. void move( Coord, Coord, Coord);                       /* move.c          */
  449. void moves( Scoord, Scoord, Scoord);                   /* move.c          */
  450. void movei( Icoord, Icoord, Icoord);                   /* move.c          */
  451. void move2( Coord, Coord);                             /* move.c          */
  452. void move2s( Scoord, Scoord);                          /* move.c          */
  453. void move2i( Icoord, Icoord);                          /* move.c          */
  454. void rmv( Coord, Coord, Coord);                        /* move.c          */
  455. void rmvs( Scoord, Scoord, Scoord);                    /* move.c          */
  456. void rmvi( Icoord, Icoord, Icoord);                    /* move.c          */
  457. void rmv2( float, float);                              /* move.c          */
  458. void rmv2s( Scoord, Scoord);                           /* move.c          */
  459. void rmv2i( Icoord, Icoord);                           /* move.c          */
  460. Token * newtokens(int);                                /* newtoken.c      */
  461. Token * newtokens(int);                                /* newtokens.c     */
  462. void makeobj(long);                                    /* objects.c       */
  463. void closeobj(void);                                   /* objects.c       */
  464. void delobj(long);                                     /* objects.c       */
  465. long genobj(void);                                     /* objects.c       */
  466. long getopenobj(void);                                 /* objects.c       */
  467. void callobj(long);                                    /* objects.c       */
  468. Boolean isobj(long);                                   /* objects.c       */
  469. void defbasis( short, Matrix);                         /* patches.c       */
  470. void patchbasis( long, long);                          /* patches.c       */
  471. void patchcurves( long, long);                         /* patches.c       */
  472. void patchprecision( long, long);                      /* patches.c       */
  473. void patch( Matrix, Matrix, Matrix);                   /* patches.c       */
  474. void rpatch( Matrix, Matrix, Matrix, Matrix);          /* patches.c       */
  475. void transformtensor( Tensor, Matrix);                 /* patches.c       */
  476. void drpatch( Tensor, int, int, int, int, int, int);   /* patches.c       */
  477. void pnt( float, float, float);                        /* points.c        */
  478. void pnts( Scoord, Scoord, int);                       /* points.c        */
  479. void pnti( Icoord, Icoord, Icoord);                    /* points.c        */
  480. void pnt2( Coord, Coord);                              /* points.c        */
  481. void pnt2s( Scoord, Scoord);                           /* points.c        */
  482. void pnt2i( Icoord, Icoord);                           /* points.c        */
  483. void bgnpoint(void);                                   /* points.c        */
  484. void endpoint(void);                                   /* points.c        */
  485. void concave(Boolean);                                 /* polygons.c      */
  486. void backface(int);                                    /* polygons.c      */
  487. void frontface(int);                                   /* polygons.c      */
  488. void polymode(long);                                   /* polygons.c      */
  489. void polyobj( int, Token[], int);                      /* polygons.c      */
  490. void poly2( long, float[][2]);                         /* polygons.c      */
  491. void poly2i( long, Icoord[][2]);                       /* polygons.c      */
  492. void poly2s( long, Scoord[][2]);                       /* polygons.c      */
  493. void polyi( long, Icoord[][3]);                        /* polygons.c      */
  494. void polys( long, Scoord[][3]);                        /* polygons.c      */
  495. void polf2( long, float[][2]);                         /* polygons.c      */
  496. void polf2i( long, Icoord[][2]);                       /* polygons.c      */
  497. void polf2s( long, Scoord[][2]);                       /* polygons.c      */
  498. void polfi( long, Icoord[][3]);                        /* polygons.c      */
  499. void polfs( long, Scoord[][3]);                        /* polygons.c      */
  500. void poly( long, float[][3]);                          /* polygons.c      */
  501. void polf( long, float[][3]);                          /* polygons.c      */
  502. void pmv( float, float, float);                        /* polygons.c      */
  503. void pmvi( Icoord, Icoord, Icoord);                    /* polygons.c      */
  504. void pmv2i( Icoord, Icoord);                           /* polygons.c      */
  505. void pmvs( Scoord, Scoord, Scoord);                    /* polygons.c      */
  506. void pmv2s( Scoord, Scoord);                           /* polygons.c      */
  507. void pmv2( float, float);                              /* polygons.c      */
  508. void pdr( Coord, Coord, Coord);                        /* polygons.c      */
  509. void rpdr( Coord, Coord, Coord);                       /* polygons.c      */
  510. void rpdr2( Coord, Coord);                             /* polygons.c      */
  511. void rpdri( Icoord, Icoord, Icoord);                   /* polygons.c      */
  512. void rpdr2i( Icoord, Icoord);                          /* polygons.c      */
  513. void rpdrs( Scoord, Scoord, Scoord);                   /* polygons.c      */
  514. void rpdr2s( Scoord, Scoord);                          /* polygons.c      */
  515. void rpmv( Coord, Coord, Coord);                       /* polygons.c      */
  516. void rpmv2( Coord, Coord);                             /* polygons.c      */
  517. void rpmvi( Icoord, Icoord, Icoord);                   /* polygons.c      */
  518. void rpmv2i( Icoord, Icoord);                          /* polygons.c      */
  519. void rpmvs( Scoord, Scoord, Scoord);                   /* polygons.c      */
  520. void rpmv2s( Scoord, Scoord);                          /* polygons.c      */
  521. void pdri( Icoord, Icoord, Icoord);                    /* polygons.c      */
  522. void pdr2i( Icoord, Icoord);                           /* polygons.c      */
  523. void pdrs( Scoord, Scoord);                            /* polygons.c      */
  524. void pdr2s( Scoord, Scoord);                           /* polygons.c      */
  525. void pdr2( float, float);                              /* polygons.c      */
  526. void pclos(void);                                      /* polygons.c      */
  527. void bgnpolygon(void);                                 /* polygons.c      */
  528. void endpolygon(void);                                 /* polygons.c      */
  529. void prefposition( long, long, long, long);            /* pref.c          */
  530. void prefsize( long, long);                            /* pref.c          */
  531. void getprefposandsize( int *, int *, int *, int *);   /* pref.c          */
  532. void qdevice(Device);                                  /* queue.c         */
  533. void unqdevice(Device);                                /* queue.c         */
  534. long qread(short *);                                   /* queue.c         */
  535. void qreset(void);                                     /* queue.c         */
  536. long qtest(void);                                      /* queue.c         */
  537. Boolean isqueued(Device);                              /* queue.c         */
  538. void qenter( Device, short);                           /* queue.c         */
  539. void rect( Coord, Coord, Coord, Coord);                /* rect.c          */
  540. void recti( Icoord, Icoord, Icoord, Icoord);           /* rect.c          */
  541. void rects( Scoord, Scoord, Scoord, Scoord);           /* rect.c          */
  542. void rectf( Coord, Coord, Coord, Coord);               /* rect.c          */
  543. void rectfi( Icoord, Icoord, Icoord, Icoord);          /* rect.c          */
  544. void rectfs( Scoord, Scoord, Scoord, Scoord);          /* rect.c          */
  545. void scale( float, float, float);                      /* scale.c         */
  546. void premulttensor( Tensor, Matrix, Tensor);           /* tensor.c        */
  547. void multtensor( Tensor, Matrix, Tensor);              /* tensor.c        */
  548. void copytensor( Tensor, Tensor);                      /* tensor.c        */
  549. void copytensortrans( Tensor, Tensor);                 /* tensor.c        */
  550. void font(short);                                      /* text.c          */
  551. void charstr(char *);                                  /* text.c          */
  552. void cmov( float, float, float);                       /* text.c          */
  553. void cmov2( float, float);                             /* text.c          */
  554. void cmovi( Icoord, Icoord, Icoord);                   /* text.c          */
  555. void cmovs( Scoord, Scoord, Scoord);                   /* text.c          */
  556. void cmov2i( Icoord, Icoord);                          /* text.c          */
  557. void cmov2s( Scoord, Scoord);                          /* text.c          */
  558. long getwidth(void);                                   /* text.c          */
  559. long getheight(void);                                  /* text.c          */
  560. void translate( float, float, float);                  /* trans.c         */
  561. void rot( float, char);                                /* trans.c         */
  562. void rotate( Angle, char);                             /* trans.c         */
  563. char * vallocate(unsigned);                            /* valloc.c        */
  564. void vcall( float[], int);                             /* vcalls.c        */
  565. void v4f(float[4]);                                    /* vcalls.c        */
  566. void v3f(float[3]);                                    /* vcalls.c        */
  567. void v2f(float[2]);                                    /* vcalls.c        */
  568. void v4d(double[4]);                                   /* vcalls.c        */
  569. void v3d(double[3]);                                   /* vcalls.c        */
  570. void v2d(long[2]);                                     /* vcalls.c        */
  571. void v4i(long[4]);                                     /* vcalls.c        */
  572. void v3i(long[3]);                                     /* vcalls.c        */
  573. void v2i(long[2]);                                     /* vcalls.c        */
  574. void v4s(short[4]);                                    /* vcalls.c        */
  575. void v3s(short[3]);                                    /* vcalls.c        */
  576. void v2s(short[2]);                                    /* vcalls.c        */
  577. void polarview( Coord, Angle, Angle, Angle);           /* viewing.c       */
  578. void lookat( Coord, Coord, Coord, Coord, Coord, Coord, /* viewing.c       */
  579.    Angle);
  580. void perspective( Angle, float, Coord, Coord);         /* viewing.c       */
  581. void window( Coord, Coord, Coord, Coord, Coord,        /* viewing.c       */
  582.    Coord);
  583. void ortho( Coord, Coord, Coord, Coord, Coord,         /* viewing.c       */
  584.    Coord);
  585. void ortho2( Coord, Coord, Coord, Coord);              /* viewing.c       */
  586. void pushviewport(void);                               /* viewp.c         */
  587. void popviewport(void);                                /* viewp.c         */
  588. void viewport( Screencoord, Screencoord, Screencoord,  /* viewp.c         */
  589.    Screencoord);
  590. void getviewport( Screencoord *, Screencoord *,        /* viewp.c         */
  591.    Screencoord *, Screencoord *);
  592. void yobbarays(int);                                   /* yobbarays.c     */
  593.  
  594. #else    /* __PROTOTYPE__ */
  595.  
  596. /*
  597.  * function definitions
  598.  */
  599.  
  600. /*
  601.  * arc routines
  602.  */
  603. extern void    arcprecision();
  604. extern void    circleprecision();
  605. extern void    arc();
  606. extern void    arcs();
  607. extern void    arci();
  608. extern void    arcf();
  609. extern void    arcfs();
  610. extern void    arcfi();
  611. extern void    circ();
  612. extern void    circs();
  613. extern void    circi();
  614. extern void    circf();
  615. extern void    circfs();
  616. extern void    circfi();
  617.  
  618. /*
  619.  * attr routines
  620.  */
  621. extern void    popattributes();
  622. extern void    pushattributes();
  623.  
  624. /*
  625.  * curve routines
  626.  */
  627. extern void    curvebasis();
  628. extern void    curveprecision();
  629. extern void    rcrv();
  630. extern void    crv();
  631. extern void    crvn();
  632. extern void    rcrvn();
  633. extern void    curveit();
  634.  
  635. /*
  636.  * draw routines
  637.  */
  638. extern void    draw();
  639. extern void    draws();
  640. extern void    drawi();
  641. extern void    draw2();
  642. extern void    draw2s();
  643. extern void    draw2i();
  644. extern void    rdr();
  645. extern void    rdrs();
  646. extern void    rdri();
  647. extern void    rdr2();
  648. extern void    rdr2s();
  649. extern void    rdr2i();
  650. extern void    bgnline();
  651. extern void    endline();
  652. extern void    bgnclosedline();
  653. extern void    endclosedline();
  654.  
  655. /*
  656.  * device routines
  657.  */
  658. extern void    qdevice();
  659. extern void    unqdevice();
  660. extern long    qread();
  661. extern void    qreset();
  662. extern long    qtest();
  663. extern Boolean    isqueued();
  664.  
  665. extern void    gexit();
  666. extern void    gconfig();
  667. extern void    shademodel();
  668. extern long    getgdesc();
  669. extern long    winopen();
  670. extern void    ginit();
  671. extern void    gconfig();
  672. extern long    getvaluator();
  673. extern Boolean    getbutton();
  674. extern void    clear();
  675. extern void    colorf();
  676. extern void    color();
  677. extern void    mapcolor();
  678. extern long    getplanes();
  679.  
  680. extern void    vinit();
  681. extern void    voutput();
  682. extern void    verror();
  683. extern void    vnewdev();
  684. extern char    *vgetdev();
  685.  
  686. /*
  687.  * mapping routines
  688.  */
  689. extern int    WtoVx();
  690. extern int    WtoVy();
  691. extern void    VtoWxy();
  692. extern void    CalcW2Vcoeffs();
  693.  
  694. /*
  695.  * general matrix and vector routines
  696.  */
  697. extern void    mult4x4();
  698. extern void    copymatrix();
  699. extern void    identmatrix();
  700. extern void    copytranspose();
  701.  
  702. extern void    multvector();
  703. extern void    copyvector();
  704. extern void    premultvector();
  705.  
  706. /*
  707.  * matrix stack routines
  708.  */
  709. extern void    getmatrix();
  710. extern void    popmatrix();
  711. extern void    loadmatrix();
  712. extern void    pushmatrix();
  713. extern void    multmatrix();
  714.  
  715. /*
  716.  * move routines
  717.  */
  718. extern void    move();
  719. extern void    moves();
  720. extern void    movei();
  721. extern void    move2();
  722. extern void    move2s();
  723. extern void    move2i();
  724. extern void    rmv();
  725. extern void    rmvs();
  726. extern void    rmvi();
  727. extern void    rmv2();
  728. extern void    rmv2s();
  729. extern void    rmv2i();
  730.  
  731. /*
  732.  * object routines
  733.  */
  734. extern Boolean    isobj();
  735. extern long    genobj();
  736. extern void    delobj();
  737. extern void    makeobj();
  738. extern void    callobj();
  739. extern void    closeobj();
  740. extern long    getopenobj();
  741. extern Token    *newtokens();
  742.  
  743. /*
  744.  * patch routines.
  745.  */
  746. extern void    defbasis();
  747. extern void    patchbasis();
  748. extern void    patchcurves();
  749. extern void    patchprecision();
  750. extern void    patch();
  751. extern void    rpatch();
  752.  
  753. /*
  754.  * point routines
  755.  */
  756. extern void    pnt();
  757. extern void    pnts();
  758. extern void    pnti();
  759. extern void    pnt2();
  760. extern void    pnt2s();
  761. extern void    pnt2i();
  762. extern void    bgnpoint();
  763. extern void    endpoint();
  764.  
  765. /*
  766.  * v routines
  767.  */
  768. extern void    v4f();
  769. extern void    v3f();
  770. extern void    v2f();
  771. extern void    v4d();
  772. extern void    v3d();
  773. extern void    v2d();
  774. extern void    v4i();
  775. extern void    v3i();
  776. extern void    v2i();
  777. extern void    v4s();
  778. extern void    v3s();
  779. extern void    v2s();
  780.  
  781. /*
  782.  * polygon routines.
  783.  */
  784. extern void    concave();
  785. extern void    backface();
  786. extern void    frontface();
  787. extern void    polymode();
  788. extern void    poly2();
  789. extern void    poly2i();
  790. extern void    poly2s();
  791. extern void    polyi();
  792. extern void    polys();
  793. extern void    polf2();
  794. extern void    polf2i();
  795. extern void    polf2s();
  796. extern void    polfi();
  797. extern void    polfs();
  798. extern void    poly();
  799. extern void    polf();
  800. extern void    pmv();
  801. extern void    pmvi();
  802. extern void    pmv2i();
  803. extern void    pmvs();
  804. extern void    pmv2s();
  805. extern void    pmv2();
  806. extern void    pdr();
  807. extern void    rpdr();
  808. extern void    rpdr2();
  809. extern void    rpdri();
  810. extern void    rpdr2i();
  811. extern void    rpdrs();
  812. extern void    rpdr2s();
  813. extern void    rpmv();
  814. extern void    rpmv2();
  815. extern void    rpmvi();
  816. extern void    rpmv2i();
  817. extern void    rpmvs();
  818. extern void    rpmv2s();
  819. extern void    pdri();
  820. extern void    pdr2i();
  821. extern void    pdrs();
  822. extern void    pdr2s();
  823. extern void    pdr2();
  824. extern void    pclos();
  825. extern void    bgnpolygon();
  826. extern void    endpolygon();
  827.  
  828. /*
  829.  * rectangle routines
  830.  */
  831. extern void    rect();
  832. extern void    recti();
  833. extern void    rects();
  834. extern void    rectf();
  835. extern void    rectfi();
  836. extern void    rectfs();
  837.  
  838. /*
  839.  * tensor routines
  840.  */
  841. extern void multtensor();
  842. extern void copytensor();
  843. extern void premulttensor();
  844. extern void copytensortrans();
  845.  
  846. /*
  847.  * text routines
  848.  */
  849. extern void    font();
  850. extern void    charstr();
  851. extern void    cmov();
  852. extern void    cmov2();
  853. extern void    cmovi();
  854. extern void    cmovs();
  855. extern void    cmov2i();
  856. extern void    cmov2s();
  857. extern long    getwidth();
  858. extern long    getheight();
  859.  
  860. /*
  861.  * transformation routines
  862.  */
  863. extern void    scale();
  864. extern void    translate();
  865. extern void    rotate();
  866. extern void    rot();
  867.  
  868. /*
  869.  * window definition routines
  870.  */
  871. extern void    ortho();
  872. extern void    ortho2();
  873. extern void    lookat();
  874. extern void    window();
  875. extern void    polarview();
  876. extern void    perspective();
  877.  
  878. /*
  879.  * routines for manipulating the viewport
  880.  */
  881. extern void    viewport();
  882. extern void    popviewport();
  883. extern void    pushviewport();
  884.  
  885. /*
  886.  * routines for retrieving the graphics position
  887.  */
  888. extern void    getgp();
  889. extern void    getgpos();
  890.  
  891. /*
  892.  * routines for handling the buffering
  893.  */
  894. extern void    backbuffer();
  895. extern void    frontbuffer();
  896. extern void    swapbuffers();
  897. extern void    doublebuffer();
  898.  
  899. /*
  900.  * routines for window sizing and positioning
  901.  */
  902. extern void    prefsize();
  903. extern void    prefposition();
  904. #endif
  905.  
  906.